package com.zkthink.ceres.pay.wechat.v3.entity.request.applyments;

import com.alibaba.fastjson.annotation.JSONField;
import com.zkthink.ceres.pay.wechat.v3.entity.request.BasePayRequest;
import lombok.*;
import lombok.experimental.Accessors;

/**
 * <p>
 * <p>
 * 合单关闭单
 * * 参考文档：https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/combine/chapter3_3.shtml
 *
 * @author vivi.huang
 * @since 2020/5/17
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Builder(builderMethodName = "newBuilder")
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class CreateApplymentsRequest extends BasePayRequest {

    private static final long serialVersionUID = -8100791351891543014L;

    /**
     * 业务申请编号
     * out_request_no
     * string(124)
     * 是
     * query
     * 1、服务商自定义的商户唯一编号。
     * 2、每个编号对应一个申请单，每个申请单审核通过后会生成一个微信支付商户号。
     * 3、若申请单被驳回，可填写相同的“业务申请编号”，即可覆盖修改原申请单信息 。
     * 示例值：APPLYMENT_00000000001
     */
    @JSONField(name = "out_request_no")
    private String outRequestNo;

    /**
     * 主体类型	organization_type	string(4)	是	query非小微的主体类型需与营业执照/登记证书上一致，可参考选择主体指引，枚举值如下。
     * 2401：小微商户，指无营业执照的个人商家。
     * 2500：个人卖家，指无营业执照，已持续从事电子商务经营活动满6个月，且期间经营收入累计超过20万元的个人商家。（若选择该主体，请在“补充说明”填写相关描述）
     * 4：个体工商户，营业执照上的主体类型一般为个体户、个体工商户、个体经营。
     * 2：企业，营业执照上的主体类型一般为有限公司、有限责任公司。
     * 3：党政、机关及事业单位，包括国内各级、各类政府机构、事业单位等（如：公安、党 团、司法、交通、旅游、工商税务、市政、医疗、教育、学校等机构）。
     * 1708：其他组织，不属于企业、政府/事业单位的组织机构（如社会团体、民办非企业、基 金会），要求机构已办理组织机构代码证。
     * 示例值：2401
     */
    @JSONField(name = "organization_type")
    private String organizationType;

    /**
     * 营业执照/登记证书信息	business_license_info	object	条件选填	query1、主体为“小微/个人卖家”时，不填。
     * 2、主体为“个体工商户/企业”时，请上传营业执照。
     * 3、主体为“党政、机关及事业单位/其他组织”时，请上传登记证书。
     */
    @JSONField(name = "business_license_info")
    private BusinessLicenseInfo businessLicenseInfo;

    /**
     * 组织机构代码证信息	organization_cert_info	object	条件选填	query主体为“企业/党政、机关及事业单位/其他组织”，且营业执照/登记证书号码不是18位时必填。
     */
    @JSONField(name = "organization_cert_info")
    private OrganizationCertInfo organizationCertInfo;

    /**
     * 经营者/法人证件类型	id_doc_type	string(64)	否	query1、主体为“小微/个人卖家”，可选择：身份证。
     * 2、主体为“个体户/企业/党政、机关及事业单位/其他组织”，可选择：以下任一证件类型。
     * 3、若没有填写，系统默认选择：身份证。
     * 枚举值:
     * IDENTIFICATION_TYPE_MAINLAND_IDCARD：中国大陆居民-身份证
     * IDENTIFICATION_TYPE_OVERSEA_PASSPORT：其他国家或地区居民-护照
     * IDENTIFICATION_TYPE_HONGKONG：中国香港居民–来往内地通行证
     * IDENTIFICATION_TYPE_MACAO：中国澳门居民–来往内地通行证
     * IDENTIFICATION_TYPE_TAIWAN：中国台湾居民–来往大陆通行证
     * 示例值：IDENTIFICATION_TYPE_MACAO
     */
    @JSONField(name = "id_doc_type")
    private String idDocType;

    /**
     * 经营者/法人身份证信息	id_card_info	object	条件选填	query请填写经营者/法人的身份证信息
     * 证件类型为“身份证”时填写。
     */
    @JSONField(name = "id_card_info")
    private IdCardInfo idCardInfo;

    /**
     * 经营者/法人其他类型证件信息	id_doc_info	object	条件选填	query证件类型为“来往内地通行证、来往大陆通行证、护照”时填写。
     */
    @JSONField(name = "id_doc_info")
    private IdDocInfo idDocInfo;

    /**
     * 是否填写结算银行账户	need_account_info	bool	是	query1、可根据实际情况，填写“true”或“false”。
     *    1）若为“true”，则需填写结算银行账户。
     *    2）若为“false”，则无需填写结算银行账户。
     * 2、若入驻时未填写结算银行账户，则需入驻后调用修改结算账户API补充信息，才能发起提现。
     * 示例值：true
     */
    @JSONField(name = "need_account_info")
    private Boolean needAccountInfo;

    /**
     * 结算银行账户	account_info	object	条件选填	query若"是否填写结算账户信息"填写为“true”, 则必填，填写为“false”不填 。
     */
    @JSONField(name = "account_info")
    private AccountInfo accountInfo;

    /**
     * 超级管理员信息	contact_info	object	是	query请填写店铺的超级管理员信息。
     * 超级管理员需在开户后进行签约，并可接收日常重要管理信息和进行资金操作，请确定其为商户法定代表人或负责人。
     */
    @JSONField(name = "contact_info")
    private ContactInfo contactInfo;

    /**
     * 店铺信息	sales_scene_info	object	是	query请填写店铺信息
     */
    @JSONField(name = "sales_scene_info")
    private SalesSceneInfo salesSceneInfo;


    @Override
    public String getUrl() {
        return null;
    }

    @Override
    public int getReadTimeoutMs() {
        return 0;
    }

    @Override
    public int getConnectTimeoutMs() {
        return 0;
    }

    @Override
    public String getRequestData() {
        return null;
    }
}